package com.tz.fruit.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 输入工具类，提供用户从键盘获取整数、字符串的方式 
 *
 */
public class InputUtil {

	private static BufferedReader reader;

	//使用静态代码块来初始化
	static {
		reader = new BufferedReader(new InputStreamReader(System.in));
	}

	/*****
	 * 根据用户的提示来获取键盘输入的整数，
	 * 如果用户输入的不是整数，则重复提示用户输入
	 * @param msg
	 * @return
	 */
	public static int inputInt(String msg) {
		//输出提示
		System.out.print(msg);
		try {
			String line = reader.readLine();
			//判断
			if (line != null && line.trim().length() > 0) {
				//进一步转换成整数
				try {
					line = line.trim(); //把前后的空白字符去掉
					int i = Integer.parseInt(line);
					return i;
				} catch (RuntimeException e) {
					//说明用户输入的不是整数,重新输入
					System.out.println("#警告：你输入的不是整数#");
					return inputInt(msg);
				}
			} else {
				//提示用户重输
				System.out.println("#警告:请不要输入空白字符#");
				return inputInt(msg); //递归调用
			}
		} catch (IOException e) {
			//			e.printStackTrace();
			throw new RuntimeException("键盘读取失败", e);
		}
	}

	/*****
	 * 根据用户的提示从键盘读到单个字符
	 */
	public static char inputChar(String msg) {
		//输出提示
		System.out.print(msg);
		//
		try {
			String line = reader.readLine();
			if (line != null && line.trim().length() > 0) {
				//把空白字符去掉并取出第一个字符
				char c = line.trim().charAt(0);
				//进一步判断这个字符是否是字母
				if (!Character.isLetter(c)) {
					//
					System.out.println("#警告：请输入英文字母[a-zA-Z]#");
					return inputChar(msg);
				} else {
					//返回
					return c;
				}
			} else {
				//提示用户重输
				System.out.println("#警告:请不要输入空白字符#");
				return inputChar(msg); //递归调用
			}
		} catch (IOException e) {
			//			e.printStackTrace();
			throw new RuntimeException("键盘读取失败", e);
		}

	}

	/****
	 * 从键盘读到一串字符串
	 */
	public static String inputString(String msg) {
		//
		System.out.print(msg);
		//
		try {
			String line = reader.readLine();
			if (line != null && line.trim().length() > 0) {
				//把空白字符去掉
				line = line.trim();
				//返回
				return line;
			} else {
				System.out.println("#警告：请不要输入空白字符串#");
				//递归调用
				return inputString(msg);
			}
		} catch (IOException e) {
			throw new RuntimeException("键盘读取失败", e);
		}

	}
}
